python基础第十一节
数据容器: 一种可以存储多个元素的python数据类型. python中的数据容器有:
- list 列表: 有序可变
- tuple 元组
- str 字符串: 有序不可变
- set 集合
- dict 字典
这5种容器各有特点, 都可以容纳多个元素, 本小节主要是学习列表.
11.1 列表定义
列表的定义语法:
[元素1, 元素2, 元素3, 元素4....]
其中, 元素就是列表内的每一个单个的数据, 既然是数据, 那么肯定就有数据类型了, 元素的数据类型无限制, 可以是任意类型的数据, 如字符串, 数字, 布尔, 列表, 字典等.
# 定义列表变量.
变量名称 = [元素1, 元素2, 元素3, 元素4 ....]
# 定义一个空列表
变量名称 = []
变量名称 = list()
列表的特点:
- 可以容纳多个元素: 上限为2**63 - 1
- 可以容纳不同类型的元素.
- 列表是有序的.
- 允许元素重复.
- 是可变的.
11.2 列表的下标(索引)
列表的每一个元素, 都有其下标(索引, 和字符串类似), 从前往后的方向.
列表的下标也是从0开始计算的, 依次递增, 按照下标索引的顺序, 可以取出对应位置的元素.
# 列表的下标.
name_list = ['zhangsan', 'lisi', 'wangwu']
print(name_list[0])
print(name_list[1])
print(name_list[2])
# 注意: 列表的下标不要超出列表的范围,
# 如列表中只有3个元素, 使用name_list[3], 此处的3是取列表中的第四个元素.
# 由于列表中只有3个元素,所以此时会抛出out of range的错误.
列表中的最后一个元素的下标为-1, 若从后向前取下标的话, 则下标不再依次递增, 而是依次递减.
那如果是嵌套的列表, 应该如何取下标呢.
# 在嵌套的列表中, 列表的下标会取出下标对应的元素整体, 而不是取出对应元素的部分.
stu_info = [
['zhangsan', '男', 18],
['lisi', '男', 17],
['wangwu', '女', 19],
]
# 此处如果使用stu_info[0], 不会取出'zhangsan'. 而是会取出['zhangsan', '男', 18].
10.3 列表的切片
在之前的章节中我们学习过字符串的切片.
实际上内容连续, 有序的容器类型都可以使用切片.
切片是从一个序列中获取一个子序列的方法.
切片操作返回的是一个新的序列对象, 对切片对象的修改不会影响原序列.
切片操作是浅拷贝. (深拷贝)
语法: 使用中括号
序列[开始下标:结束下标:步长]
- 起始下标表示开始的地方, 可以省略不写, 表示从开头开始.
- 结束下标, 表示结束的地方, 可以省略不写, 表示一直截取到结尾.
- 步长表示依次取元素的间隔.
- 1表示一个一个的取.
- 2表示每跳过一个取一个.
- n表示每跳过n-1个元素取一个
- 负数步长, 符号表示方向. 如-2表示从后往前取, 每跳过一个取一个.
练习:
给定一个列表和一个整数 k,将列表分割成长度为 k 的子列表,如果列表的长度不是 k 的倍数,则最后一个子列表的长度小于 k
10.4 列表的常用方法
- 查询某元素的下标: 列表.index(元素)
- 修改指定位置的元素的值: 列表[下标] = 值
- 在列表中添加元素, 追加到列表的尾部: 列表.append(元素)
- 在列表中插入元素, 在指定的下标位置, 插入指定的元素: 列表.insert(下标, 元素)
- 合并2个列表: 列表.extend(列表), extend可用于合并数据容器, 依次追加到列表尾部.
- 删除元素:
- 删除指定下标索引的元素:
- del 列表[下标]
- 列表.pop(下标)
- 删除某元素在列表中的第一个匹配项:
- list.remove(元素)
- 删除指定下标索引的元素:
- 清空列表: 列表.clear()
- 统计列表内某元素的数量: 列表.count(元素)
- 统计列表一共有多少个元素: len(列表)
- 统计列表内元素的和(列表内元素是数字类型): sum(列表)
- 将列表转换为字符串: "".join(列表)
10.5 列表的反转和排序
反转
列表.reverse()
reversed 是 Python 内置函数之一,用于返回一个反转序列后的迭代器,该序列可以是列表、元组、字符串等可迭代对象.
排序
- sort: 列表.sort(reverse=bool), **reverse用于控制是正序(升序)还是倒序(降序). 默认升序.**reverse默认是就是false.
- sorted: 是 Python 内置函数之一, 用于返回一个排序后的序列, 也可以使用reverse控制排序的方向. 默认false, 升序.
注意
sort, sorted都可以接受一个名叫key的参数, 用于指定排序的关键字, 默认为None, 表示直接比较序列元素的值进行排序, 如果指定了key, 则sorted会对序列中的每个元素调用key, 然后用key的返回值作为排序的依据.
sort和sorted的区别: - sort是列表对象的方法, sorted是python的内置函数.
- sort是修改原列表. sorted是返回一个新的列表.
10.6 列表的遍历
遍历就是依次取出列表中的元素:
- 使用while循环获取下标取出.
- 使用for循环取出.
思考
在while循环中, 我们只需要打印计数器的值, 就可以知道列表遍历到了第几个. 那么在for循环中应该如何做.
10.7 列表推导式
python列表推导式是一种快速构建列表的方式, 它允许在一行代码中创建一个新的列表.
语法如下:
[expression for item in iterable if condition]
其中:
- expression:列表中的每个元素通过表达式计算而来.
- item:迭代器/可迭代对象中的每个元素.
- iterable:要迭代的对象.
- condition(可选):过滤列表中元素的条件.
列表推导式的嵌套:
嵌套的列表推导式是指在列表推导式中嵌套了另一个列表推导式或循环语句, 用来生成嵌套列表的一种语法.
10.8 列表中的坑
在循环中移除元素可能会导致意想不到的结果. 例如. 当移除元素时列表的长度会改变,这可能会导致跳过某些元素.